Zero-fill new GtkTextIter
authorOrivej Desh <orivej@gmx.fr>
Sun, 16 Dec 2018 17:03:47 +0000 (17:03 +0000)
committerOrivej Desh <orivej@gmx.fr>
Sun, 16 Dec 2018 17:03:47 +0000 (17:03 +0000)
iter_init_common() is used on uninitialized GtkTextIter, and since neither it
nor its callers initiliaze its padding fields, they contain garbage.

This is a problem for Go - which checks that structs passed to C functions do
not contain pointers to Go-allocated memory - when the garbage happens to be
such a pointer.  Although Go zero-fills all GtkTextIter that it allocates, this
does not help when GTK functions such as insert_pixbuf_or_widget_segment called
for gtk_text_buffer_create_child_anchor copy garbage from their stack-allocated
GtkTextIter into a clean iter.  To work around this a GtkTextIter has to be
discraded after use in text buffer anchor inserting functions:
https://github.com/gotk3/gotk3/pull/307

gtk/gtktextiter.c

index e16f3a57963cede7cf9e23dc10f081f99bbb0886..be31d084d014b58272d2e893bba9b86aa0f7450e 100644 (file)
@@ -245,6 +245,8 @@ iter_init_common (GtkTextIter *_iter,
   g_return_val_if_fail (iter != NULL, NULL);
   g_return_val_if_fail (tree != NULL, NULL);
 
+  memset (iter, 0, sizeof (GtkTextRealIter));
+
   iter->tree = tree;
 
   iter->chars_changed_stamp =